/*
 * 任务管理，定时器管理
 */

#ifndef _TASK_H
#define _TASK_H

#include <include/types.h>
#include <include/limits.h>

/* 进程状态 */
#define TASK_NULL               0   /* 此位置没有任务 */
#define TASK_RUNNING            1   /* 运行 */
#define TASK_SLEEP              2   /* 睡眠 */
/* 定时器状态 */
#define TIMER_NULL              0   /* 无效定时器 */
#define TIMER_WAIT              1   /* 正在使用的定时器 */

/* 任务结构 */
typedef struct _task_struct
{
    u8	state;                              /* 进程状态 */
    u8  parent;                             /* 父进程 */
    s32 counter;                            /*  
                                             * 运行时间片，为负数时表示正在睡眠或其他？主动放弃时间片情况
                                             * 运行时，此值递减至零后切换任务，睡眠时此值递增至0后唤醒
                                             */
    u32 user_time,                          /* 用户态运行时间(滴答数) */
        system_time,                        /* 内核态运行时间(滴答数) */
        start_time;                         /* 进程开始的时间 */
    //struct file *file_pointer[NR_OPEN];     /* 进程使用的文件表结构 */
    u8  path[MAX_PATH];                     /* 任务执行文件路径 */

    u32	pgd;                                /* 进程页目录 */
} __attribute__((packed)) task_struct;

typedef void (*dotimefun_ptr)(s32 handle);	/* 定时器回调 原型 */


/* 定时器的结构描述 */
typedef struct _timer_struct
{
    u8  state;
    u32 counter;
    dotimefun_ptr timer_dirver;
}__attribute__((packed)) timer_struct;

/* 时间结构 */
typedef struct  {
    unsigned char sec, min, hour;
}__attribute__((packed)) cmos_time;

/* 日期结构 */
typedef struct  {
    int dayofweek, day, month, year;
}__attribute__((packed)) cmos_date;


extern task_struct  task_list[MAX_TASK];	    /* 任务队列 */
extern timer_struct timer_list[MAX_TIMER];      /* 定时器队列 */
extern u32  current;                            /* 当前任务 */
extern u32  jiffies;                            /* 开机后的滴答数 */

extern void init_task();
extern void time_hander();

#endif
